From 8b370098cadc1ecff66453f49360afe123ad6025 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Thu, 10 Jan 2008 14:27:54 +0000 Subject: [PATCH] Fix possible recursion by resetting the idle source id. (#507605, William 2008-01-10 Emmanuele Bassi * gtk/gtkrecentchoosermenu.c: (idle_populate_func), (idle_populate_clean_up): Fix possible recursion by resetting the idle source id. (#507605, William Pitcock) svn path=/trunk/; revision=19339 --- ChangeLog | 7 +++++++ gtk/gtkrecentchoosermenu.c | 24 ++++++++++++++---------- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 70a762fade..4af6ad2975 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-01-10 Emmanuele Bassi + + * gtk/gtkrecentchoosermenu.c: + (idle_populate_func), (idle_populate_clean_up): Fix possible + recursion by resetting the idle source id. (#507605, William + Pitcock) + 2008-01-10 Kristian Rietveld * gtk/gtktreeview.c (gtk_tree_view_motion_draw_column_motion_arrow), diff --git a/gtk/gtkrecentchoosermenu.c b/gtk/gtkrecentchoosermenu.c index 8cecf26f7d..f72909b5a9 100644 --- a/gtk/gtkrecentchoosermenu.c +++ b/gtk/gtkrecentchoosermenu.c @@ -926,8 +926,6 @@ idle_populate_func (gpointer data) pdata = (MenuPopulateData *) data; priv = pdata->menu->priv; - priv->populate_id = 0; - if (!pdata->items) { pdata->items = gtk_recent_chooser_get_items (GTK_RECENT_CHOOSER (pdata->menu)); @@ -936,6 +934,7 @@ idle_populate_func (gpointer data) /* show the placeholder here */ gtk_widget_show (pdata->placeholder); pdata->displayed_items = 1; + priv->populate_id = 0; return FALSE; } @@ -978,6 +977,8 @@ check_and_return: g_list_foreach (pdata->items, (GFunc) gtk_recent_info_unref, NULL); g_list_free (pdata->items); + priv->populate_id = 0; + retval = FALSE; } else @@ -991,14 +992,17 @@ idle_populate_clean_up (gpointer data) { MenuPopulateData *pdata = data; - /* show the placeholder in case no item survived - * the filtering process in the idle loop - */ - if (!pdata->displayed_items) - gtk_widget_show (pdata->placeholder); - g_object_unref (pdata->placeholder); - - g_slice_free (MenuPopulateData, data); + if (pdata->menu->priv->populate_id == 0) + { + /* show the placeholder in case no item survived + * the filtering process in the idle loop + */ + if (!pdata->displayed_items) + gtk_widget_show (pdata->placeholder); + g_object_unref (pdata->placeholder); + + g_slice_free (MenuPopulateData, data); + } } static void -- 2.30.2